{-
	Copyright (c) 2009 Aitor Lopez Fadrique <mailto:aitorlf@gmail.com>
	All rights reserved
	Licensed under GNU LGPL v2.1

	$Id: FrenchClassicDeck.hs 15 2009-09-28 21:16:23Z aitorlf $

	This program is free software; you can redistribute it and/or
	modify it under the terms of the GNU Lesser General Public
	License version 2.1 (and just under that one) as published by
	the Free Software Foundation.

	This program is distributed in the hope that it will be useful,
	but without any warranty; without even the implied warranty of
	merchantability or fitness for a particular purpose. See the GNU
	Lesser General Public License for more details.

	You should have received a copy of the GNU Lesser General Public
	License along with this program; if not, write to the Free
	Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
	MA 02111-1307, USA.
-}

{-|
	Module		: Games.Cards.Deck.FrenchClassicDeck
	Copyright	: (c) Aitor Lopez Fadrique <mailto:aitorlf@gmail.com>
	License		: GNU LGPL v2.1 <http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html>

	Maintainer	: Aitor Lopez Fadrique <mailto:aitorlf@gmail.com>
	Stability	: provisional
	Portability	: portable

	Definition of the French classic (32 or 33 cards) decks according to Games.Cards.Deck.

	This module defines the basic French old-fashioned classic decks; 32 cards and 33 cards
	(with single wild card) sized.
-}
module Games.Cards.Deck.FrenchClassicDeck(
		-- * French old-fashioned decks
		-- ** Types defining cards and decks for the French classic deck
		FrenchClassicRank(..),
		FrenchClassicCard,
		FrenchClassicDeck,
		FrenchClassicJokerCard,
		FrenchClassicJokerDeck,
		-- ** Instances of French classic decks
		frenchClassicDeck,
		frenchClassicJokerDeck,
	)where

import Games.Cards.Deck


-- | Well-known ranks for the classic French deck.
data FrenchClassicRank =
		-- | 'Un' (/One 1/)
		Un
		-- | 'Sept' (/Seven 7/)
		| Sept
		-- | 'Huit' (/Eight 8/)
		| Huit
		-- | 'Neuf' (/Nine 9/)
		| Neuf
		-- | 'Dix' (/Ten 10/)
		| Dix
		-- | '(Valet ' (/Knave V/)
		| Valet
		-- | 'Dame' (/Queen D/)
		| Dame
		-- | 'Roi' (/King R/)
		| Roi
	deriving (Eq, Ord, Enum, Bounded, Show, Read)
instance CardRank FrenchClassicRank


-- | Definition of the classic French @'Card'@s and @'Deck'@s, with and without @'WildCard'@s
-- (@'SingleJoker'@, consisting on one single element).

-- | 32 cards classic French deck, with no wild cards.
-- | Classic French card type.
type FrenchClassicCard = Card FrenchClassicRank FrenchSuit WildCardNone

-- | Classic French deck type.
type FrenchClassicDeck = Deck FrenchClassicRank FrenchSuit WildCardNone

-- | Classic French deck instance.
frenchClassicDeck :: FrenchClassicDeck
frenchClassicDeck = deck

-- | 33 cards French deck, with one unique wild card.
-- | Classic French (with wildcard) card.
type FrenchClassicJokerCard = Card FrenchClassicRank FrenchSuit SingleJoker

-- | Classic French (with wildcard) deck.
type FrenchClassicJokerDeck = Deck FrenchClassicRank FrenchSuit SingleJoker

-- | Classic French (with wildcard) deck instance.
frenchClassicJokerDeck :: FrenchClassicJokerDeck
frenchClassicJokerDeck = deck
